export default {
  data() {
    return {
    }
  },
  methods: {
    /**
     * 有A型、B型、C型、D型端口选择的逻辑都不相同
     * 所以这里拆成4个方法，每个方法只处理一个型号的端口选择逻辑，以免型号过多，放在一个方法里处理起来不方便后期维护
     */

    /**
     * A型设备有A和B面，A——A和B——B不能相连，只能A-B相连
     */
    portChange_A(portId, type) {
      // 先判断当前端口是否已经选中
      let hasIndex = 0
      hasIndex = this.selectedPortList.findIndex(
        i => i.portId === portId
      )
      if (hasIndex !== -1) {
        // 如果已经被选中，移除选中并将选中状态置为false（浅拷贝）
        this.selectedPortList.splice(hasIndex, 1)[0][type] = false
      } else {
        this.portIdKey[portId][type] = true
        // 然后再判断，如果用户选择同一面的两个类型的端口，需要把前一个同类型的端口给取消选中
        let index = 0
        index = this.selectedPortList.findIndex(
          i =>
            i.partFlag === this.portIdKey[portId].partFlag
        )
        if (index !== -1) {
          this.selectedPortList.splice(index, 1)[0][type] = false // 把同类型的给剔除掉（浅拷贝）
        }
        // 把后选择的push到集合里
        this.selectedPortList.push(this.portIdKey[portId])
      }
      if (this.selectedPortList.length > 2) {
        this.selectedPortList.shift()[type] = false
      }
      this.$forceUpdate() // 数据改变，更新dom
      this.$emit('change', this.selectedPortList)
    },
    /**
     * B型设备只有B面，允许B-B相连
     */
    portChange_B(portId, type) {
      // 先判断当前端口是否已经选中
      let hasIndex = 0
      hasIndex = this.selectedPortList.findIndex(
        i => this.portIdKey[portId][type] && i.portId === portId
      )
      if (hasIndex !== -1) {
        // 如果已经被选中，移除选中并将选中状态置为false（浅拷贝）
        this.selectedPortList.splice(hasIndex, 1)[0][type] = false
      } else {
        this.portIdKey[portId][type] = true
        // 把后选择的push到集合里
        this.selectedPortList.push(this.portIdKey[portId])
      }
      if (this.selectedPortList.length > 2) {
        const deletePort = this.selectedPortList.shift()
        // 特殊情况1：如果选择了第一个端口B-9，第二个端口B-9，第三个端口B-11，此时剔除第一个B-9时，到底剔除哪一个根据当前type来决定
        // 特殊情况2：如果选择了第一个端口B-9，第二个端口B-11，第三个端口B-1，此时剔除第一个B-9，到底剔除哪一个根据当前type决定
        // 为什么要这样做：因为B-9在this.portIdKey[portId]里是同一份数据
        const samePort = this.selectedPortList.find(i => i.portId === deletePort.portId)
        if (samePort) {
          if (type === 'selected') {
            deletePort.conn_selected = false
          }
          if (type === 'conn_selected') {
            deletePort.selected = false
          }
        } else {
          // 正常情况：第一个选择了B-9，第二个选择了B-11，第三个选择了B-15，需要剔除B-9
          if (deletePort.selected) deletePort.selected = false
          if (deletePort.conn_selected) deletePort.conn_selected = false
        }
      }
      this.$forceUpdate() // 数据改变，更新dom
      this.$emit('change', this.selectedPortList)
    },
    /**
     * C型设备有A和B面，允许A——B和B——B这种连接方式，不允许A-A相连
     */
    portChange_C(portId, type) {
      let hasIndex = 0
      hasIndex = this.selectedPortList.findIndex(
        i => this.portIdKey[portId][type] && i.portId === portId
      )
      if (hasIndex !== -1) {
        this.selectedPortList.splice(hasIndex, 1)[0][type] = false
      } else {
        if (this.portIdKey[portId].partFlag !== 'M') {
          // 防止A-A相连
          let index = 0
          index = this.selectedPortList.findIndex(
            i =>
              i.partFlag === this.portIdKey[portId].partFlag
          )
          if (index !== -1) {
            this.selectedPortList.splice(index, 1)[0][type] = false // 把同类型的给剔除掉（浅拷贝）
          }
        }
        this.portIdKey[portId][type] = true
        // 把后选择的push到集合里
        this.selectedPortList.push(this.portIdKey[portId])
      }
      if (this.selectedPortList.length > 2) {
        const deletePort = this.selectedPortList.shift()
        const samePort = this.selectedPortList.find(i => i.portId === deletePort.portId)
        if (samePort) {
          if (type === 'selected') {
            deletePort.conn_selected = false
          }
          if (type === 'conn_selected') {
            deletePort.selected = false
          }
        } else {
          if (deletePort.selected) deletePort.selected = false
          if (deletePort.conn_selected) deletePort.conn_selected = false
        }
      }
      this.$forceUpdate() // 数据改变，更新dom
      this.$emit('change', this.selectedPortList)
    },
    /**
     * D型（D型afsType=D此型号由后端定义）
     * （但是在前端里展示的是Ae型、Be型、Ce型）设备有A和B面，允许A——A和B——B和A——B这3中连接方式
     */
    portChange_D(portId, type) {
      let hasIndex = 0
      hasIndex = this.selectedPortList.findIndex(
        i => this.portIdKey[portId][type] && i.portId === portId
      )
      if (hasIndex !== -1) {
        this.selectedPortList.splice(hasIndex, 1)[0][type] = false
      } else {
        this.portIdKey[portId][type] = true
        // 把后选择的push到集合里
        this.selectedPortList.push(this.portIdKey[portId])
      }
      if (this.selectedPortList.length > 2) {
        const deletePort = this.selectedPortList.shift()
        const samePort = this.selectedPortList.find(i => i.portId === deletePort.portId)
        if (samePort) {
          if (type === 'selected') {
            deletePort.conn_selected = false
          }
          if (type === 'conn_selected') {
            deletePort.selected = false
          }
        } else {
          if (deletePort.selected) deletePort.selected = false
          if (deletePort.conn_selected) deletePort.conn_selected = false
        }
      }
      this.$forceUpdate() // 数据改变，更新dom
      this.$emit('change', this.selectedPortList)
    }
  }
}
